package com.github.data_manage.util

import com.github.data_manage.util.TimeUtils.isBetween
import java.time.LocalDate

object TimeUtils {

    fun isBetween(date: LocalDate?, startDate: LocalDate?, endDate: LocalDate?): Boolean {
        if (date == null) {
            return false
        }
        if (endDate != null && date <= endDate) {
            return true
        }
        return (startDate != null && date >= startDate) && endDate == null
    }

    fun isBetween(startDate1: LocalDate?, endDate1: LocalDate?, startDate2: LocalDate?, endDate2: LocalDate?): Boolean {
        if (startDate1 == null && endDate1 == null) {
            return false
        }
        if (startDate2 == null && endDate2 == null) {
            return false
        }
        // 都不为空,人员的开始、结束时间任意一个在同事、同学的开始、结束时间范围内就行
        if (startDate1 != null && endDate1 != null && startDate2 != null && endDate2 != null) {
            return isBetween(startDate1, startDate2, endDate2) || isBetween(endDate1, startDate2, endDate2)
        }
        // 人员的开始时间不为空,结束时间为空
        if (startDate1 != null && endDate1 == null) {
            if (startDate2 != null && endDate2 != null) {
                return isBetween(startDate2, startDate1, endDate2)
            }
            // 同事、同学的开始时间不为空,结束时间为空,直接为true
            if (startDate2 != null && endDate2 == null) {
                return true
            }
            // 同事、同学的开始时间为空,结束时间不为空,同事、同学的结束时间大于人员开始的即可
            if (endDate2 != null) {
                return endDate2 >= startDate1
            }
        }
        // 人员的开始时间不为空,结束时间为空
        if (startDate1 == null && endDate1 != null) {
            if (startDate2 != null && endDate2 != null) {
                return isBetween(endDate1, startDate2, endDate2)
            }
            // 同事、同学的开始时间不为空,结束时间为空,人员的结束时间大于同事、同学的开始时间即可
            if (startDate2 != null && endDate2 == null) {
                return endDate1 >= startDate2
            }
            // 同事、同学的开始时间为空,结束时间不为空,人员的结束时间小于同事、同学的结束时间即可
            if (endDate2 != null) {
                return endDate2 >= endDate1
            }
        }
        return false
    }

}


